#include <alt_types.h>
#include "ptsi.h"
#include "../utility.h"

static alt_u16	frame_size;			//!< Размер формируемого / сформированного пакета
static alt_u16	heigth;				//!< Высота растра
static alt_u16	width;				//!< Ширина растра
static alt_u16	frame;				//!< Номер видеокадра
static alt_u16	row_cnt;		//!< Счетчик количества запрошенных строк


alt_u8 ptsi_init(void)
{
	heigth		= 240;
	width		= 320;
	frame		= 0;
	frame_size	= 0;

	return 0;
}


alt_u8 ptsi_head_parser(alt_u8* msg)
{
	alt_u8				cmd = 0;
	ptsi_header_t*		header;

	header	= (ptsi_header_t*)msg;

	if (header->start == 0x24)
	{
		cmd = header->cmd;
	}

	return cmd;
}

// Создание заголовка видеокадра
alt_u8 ptsi_create_head_video(alt_u8* msg, alt_u16 row_num)
{
	alt_u8				err 		= 0;
	ptsi_header_t*		header;
	video_head_t*		video_head;

	if (row_num == 1)
	{
		frame++;
	};

	header		= (ptsi_header_t*)msg;
	video_head	= (video_head_t*)(header + 1);

	header->start		= 0x24;
	header->cmd			= PTSI_VIDEO_MSG;

	video_head->heigth	= hton16(heigth);
	video_head->width	= hton16(width);
	video_head->frame	= hton16(frame);
	video_head->row 	= hton16(row_num);
	video_head->res[0]	= 0;
	video_head->res[1]	= 0;
	video_head->res[2]	= 0;
	video_head->res[3]	= 0;

	frame_size	= PTSI_HEAD_SIZE + PTSI_VIDEO_HEAD_SIZE + width;
	return err;
}

// Управление счетчиком строк
// При каждом обращении счетчик -1, пока не станет 0
alt_u8 ptsi_row_ctrl(void)
{
	alt_u8 		err = 0;
	if (row_cnt > 0)
	{
		row_cnt--;
	}
	else
	{
		err = 1;
	}

	return err;
}


alt_u8 ptsi_msg_parser(alt_u8* msg)
{
	alt_u8		err = 0;
	alt_u8		cmd = 0;

	cmd = ptsi_head_parser(msg);
	switch(cmd)
	{
	case 0:
		err = 1;
		break;

	case 8:
		row_cnt = *((alt_u16*)(msg + PTSI_HEAD_SIZE));// + 239;
		break;

	default:
		break;
	} // END switch(cmd)

	return err;
}
